package c926.xiaoduyun.xiaodu.mservice;

import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.BasedataEntityType;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.BeforeOperationArgs;

import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.DBServiceHelper;
import kd.bos.servicehelper.basedata.BaseDataRefrenceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;

/**
 * 单据操作插件
 * 消毒方案 版本控制插件
 */
public class XiaoduSchemeVersionControllPlugin extends AbstractOperationServicePlugIn implements Plugin {
    /**
     * 版本号-整数-锁定，默认值为1。
     * 方案没有被消毒记录引用时，再次修改方案时不更新版本号；
     * 方案被消毒记录单引用过，再次修改方案发布后则生成新的方案，
     * 且新方案的版本号+1，前一版本号的方案的版本状态改为历史版本
     * <p>
     * 版本状态-单据状态-锁定，值有：历史版本、最新版本，默认为最新版本。
     * 修改生成新方案时，旧方案的版本状态改为历史版本
     * @param e
     */
    @Override
    public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
        // 获取基础资料信息
        DynamicObject[] dynamicObjects = e.getDataEntities();
        boolean refrenced = true;
        Object pkValue = null;
        for (DynamicObject dynamicObject : dynamicObjects){
            // 判断基础资料是否被引用过
            BasedataEntityType dataEntityType = (BasedataEntityType) dynamicObject.getDataEntityType();
            pkValue = dynamicObject.getPkValue();
            refrenced = BaseDataRefrenceHelper.isRefrenced(dataEntityType, pkValue);
        }
        if (refrenced){ // 如果被引用过
            // 查出旧消毒方案、定义查询参数
            String entityName = "c926_scheme";
            String fields = "number,name,c926_version,status,masterid";
            QFilter qFilter = new QFilter("id", QCP.equals,pkValue);
            DynamicObject loaded = BusinessDataServiceHelper.loadSingle(entityName, fields, new QFilter[]{qFilter});
            // 修改版本状态
            loaded.set("status","B");
            SaveServiceHelper.update(loaded);

            // 新版本 版本号+1
            long[] schemes = DBServiceHelper.genLongIds("tk_c926_scheme", 1);
            DynamicObject object = dynamicObjects[0];
            int oldVersion = (int) object.get("c926_version");
            object.set("id",schemes[0]);
            object.set("c926_version",oldVersion + 1);
            SaveServiceHelper.save(new DynamicObject[]{object});
        }
        super.beforeExecuteOperationTransaction(e);
        this.getOperationResult().setShowMessage(true);
        this.getOperationResult().setSuccess(true);
        this.getOperationResult().setMessage("发布成功");
    }
}